package com.qf;

/**
 * @author 孙亚梅
 * @version V1.0
 * @Project javase2203
 * @Package com.qf.controller
 * @Description:
 * @Date 2022/5/23 17:21
 */

import com.qf.pojo.User;
import com.qf.service.UserService;
import com.qf.service.UserServiceImpl;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

/**
 * 消费者Controller,控制层
 */
@WebServlet("/user")
public class UserController extends BaseServlet {
    /**
     * 用户注册，效验用户名是否可用
     *check  检查
     */
    public  void  check(HttpServletRequest request, HttpServletResponse response)throws Exception{
        //1:接收用户名参数
        String username = request.getParameter("username");
        //2:调用service，到数据库中查询这个用户是否存在，如果存在，那么这个用户名不可用，如果不存在，用户名可用
        UserService userService = new UserServiceImpl();
       boolean check = userService.check(username);
        //3:将是否可用信息返回给页面展示
        if (check){
            //用户名可用
            response.getWriter().write(Constants.NOT_HAS_USER);
        }else {
            //用户名不可用
            response.getWriter().write(Constants.HAS_USER);
        }

    }
/**
 * 消费者用户登录
 */

public String login(HttpServletRequest request,HttpServletResponse response){
    //1:获取用户名参数
    String username = request.getParameter("username");
    //2:获取用户密码参数
    String password = request.getParameter("password");
    //3:获取用户验证码参数
    String code = request.getParameter("code");
    //4：获取用户是否要自动登录参数
    String auto = request.getParameter("auto");
    //5：判断用户名，密码，验证码不为空，如果为空重定向到登录页面
    if (!StrUtils.empty(username) || !StrUtils.empty(password) || !StrUtils.empty(code)){
        request.setAttribute("msg", "用户名，密码，验证码不可以为空！");
        //调转到登录页面
        return  "forward:/login.jsp";
    }
    //6：判断验证码是否正确，不正确重定向到登录页面重新登录
    String sessionCode =(String) request.getSession().getAttribute("code");
    if (!code.equalsIgnoreCase(sessionCode)){
        request.setAttribute("username", username);
        request.setAttribute("passeord", password);
        request.setAttribute("msg", "验证码错误");
        //调转到登录页面
        return  "forward:/login.jsp";
    }
    //7：调用service完成用户密码的效验
        UserService userService =new UserServiceImpl();
        User user =userService.login(username,password);
    //8：判断用户名，密码是否错误，如果错误返回提示信息
        if (user == null){
            request.setAttribute("username", username);
            request.setAttribute("password", password);
            request.setAttribute("msg", "用户名或者密码错误");
            //跳转到登录页面
            return "forward:/login.jsp";
        }
    //9：登录成功，将用户信息放入tomcat的session会话中携带
    request.getSession().setAttribute("loginUser", user);

    //10：判断用户是否要自动登录，进行自动登录设置
    if ("on".equals(auto)){
        Cookie cookie = new Cookie(Constants.AUTO_NAME, user.getUsername());
        //设置这个cookie保存的路径
        cookie.setPath("/");
        //设置cookie保存数据的时间
        cookie.setMaxAge(60*60*24*14);
        //通过响应将cookie数据写回到浏览器中保存
        response.addCookie(cookie);
    }
    //11：调转到首页
    return "redirect:/goods?method=index";

}
/**
 * 消费者用户注册
 */
public String register(HttpServletRequest request,HttpServletResponse response) throws  Exception{
    //1:获取页面传入的所有参数，key就是页面input框的name属性，value就是input框中输入的值
    Map<String,String[]> parameterMap =request.getParameterMap();
    //2:将参数封装成User对象
    //创建用户对象
    User user = new User();
    //利用beanUtils工具类，将map中的数据全部自动set到user对象中
    //使用要求：user对象的属性名必须和页面input框的name属性一致，实体类必须实现serializble序列化接口
    BeanUtils.populate(user, parameterMap);
    //3：调用service，将用户对象保存到MySQL数据库的用户表中
    UserServiceImpl userService = new UserServiceImpl();
    int count =  userService.createUser(user);
    //4：调转到注册成功页面
    if (count >0){
        //注册成功
        return "redirect:/registerSuccess.jsp";
    }else {
        //注册失败
        return "redirect:/register.jsp";
    }

}
}
